package io.zhiller.ollamaclient.utils

import android.util.Log

object LoggerUtils {
  
  // 日志标签
  private const val TAG = "AppLogger"
  
  // 日志级别
  enum class LogLevel {
    DEBUG, INFO, WARN, ERROR
  }
  
  /**
   * 打印日志
   * @param message 日志内容
   * @param level 日志级别（默认为 DEBUG）
   */
  private fun log(message: String, level: LogLevel = LogLevel.DEBUG) {
    when (level) {
      LogLevel.DEBUG -> Log.d(TAG, message)
      LogLevel.INFO -> Log.i(TAG, message)
      LogLevel.WARN -> Log.w(TAG, message)
      LogLevel.ERROR -> Log.e(TAG, message)
    }
  }
  
  /**
   * 快速输出 DEBUG 级别日志
   * @param message 日志内容
   */
  fun debug(message: String) {
    log(message, LogLevel.DEBUG)
  }
  
  /**
   * 快速输出 INFO 级别日志
   * @param message 日志内容
   */
  fun info(message: String) {
    log(message, LogLevel.INFO)
  }
  
  /**
   * 快速输出 WARN 级别日志
   * @param message 日志内容
   */
  fun warn(message: String) {
    log(message, LogLevel.WARN)
  }
  
  /**
   * 快速输出 ERROR 级别日志
   * @param message 日志内容
   */
  fun error(message: String) {
    log(message, LogLevel.ERROR)
  }
  
  /**
   * 打印生命周期事件
   * @param event 生命周期事件名称
   */
  fun logLifecycle(event: String) {
    log("Lifecycle Event: $event", LogLevel.INFO)
  }
  
  /**
   * 打印当前线程信息
   */
  fun logThreadInfo() {
    val threadName = Thread.currentThread().name
    log("Current Thread: $threadName", LogLevel.DEBUG)
  }
  
  /**
   * 打印异常信息
   * @param throwable 异常对象
   * @param message 附加信息（可选）
   */
  fun logError(throwable: Throwable, message: String? = null) {
    val errorMessage = message ?: "An error occurred"
    log("$errorMessage: ${throwable.message}", LogLevel.ERROR)
    throwable.printStackTrace()
  }
}